package com.xayy.health.mgt.service;

import java.util.Map;

import com.xayy.health.mgt.model.HealthAssessResult;
import com.xayy.health.mgt.model.vo.CalculateNodeVo;
import com.xayy.health.mgt.model.vo.CalculateVo;

import cn.kawins.base.result.CheckResult;
import cn.kawins.mybatis.BaseService;

/**
 * @author Nie
 * @version V1.0
 * @date 2023/4/10 10:19
 */
public interface HealthAssessResultService extends BaseService<HealthAssessResult> {
    /**
     * 新增或更新节点分数
     * 
     * @param healthAssessResult
     *            健康评估结果信息
     * @return 结果日志
     */
    CheckResult<?> updateAssessResult(HealthAssessResult healthAssessResult);

    /**
     * 查询节点分数
     * 
     * @param satelliteMid
     *            卫星id
     * @param satelliteName
     *            卫星名称
     * @param nodeMid
     *            节点id
     * @param parentId
     *            上级id
     * @return 结果日志
     */
    CheckResult<?> selectNodeScore(Long satelliteMid, String satelliteName, Long nodeMid, Long parentId);

    /**
     * 计算根节点分数
     * 
     * @param calculateVo
     *            入参信息
     * @return 结果信息
     */
    CheckResult<?> calculate(CalculateVo calculateVo);

    /**
     * 获取健康评估算法下拉框列表
     * 
     * @return 结果信息
     */
    CheckResult<?> spinner();

    /**
     * 查询节所有最底层节点是否完成打分
     *
     * @param satelliteMid
     *            卫星id
     * @return 结果日志
     */
    CheckResult<?> checkChildScore(Long satelliteMid);

    /**
     * 计算叶子节点故障分数
     * 
     * @param calculateNodeVo
     *            入参信息
     * @return 结果日志
     */
    CheckResult<Object> calculateNodeFault(CalculateNodeVo calculateNodeVo);

    /**
     * 计算叶子节点性能分数
     * 
     * @param calculateNodeVo
     *            入参信息
     * @return 结果日志
     */
    CheckResult<Object> calculateNodePerformance(CalculateNodeVo calculateNodeVo);

    /**
     * 查询选中节点的图表信息
     * 
     * @param satId
     *            卫星id
     * @param nodeMid
     *            节点id
     * @param parentId
     *            上级id
     * @return 结果日志
     */
    CheckResult<?> selectNodeInfo(Long satId, Long nodeMid, Long parentId);

    /**
     * 修改部件节点打分类型
     * 
     * @param healthAssessResult
     *            入参信息
     * @return 结果日志
     */
    CheckResult<Object> updateStatus(HealthAssessResult healthAssessResult);

    /**
     * 获取权重和日志信息
     * 
     * @param healthAssessResult
     *            入参信息
     * @return 结果日志
     */
    CheckResult<Map<String, Object>> getWeightMsg(HealthAssessResult healthAssessResult);

    /**
     * 修改节点信息权重信息
     * 
     * @param healthAssessResult
     *            入参信息
     * @return 结果日志
     */
    CheckResult<Object> updateWeight(HealthAssessResult healthAssessResult);

    CheckResult<Object> calculateSystemPerformance(CalculateNodeVo calculateNodeVo);

    CheckResult<Object> calculateSatellitePerformance(CalculateNodeVo calculateNodeVo);
}
